package Test;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 沈明月
 * Date: 2023-06-29
 * Time: 15:54
 */

//一个类，一个字节码文件
class OuterClass{
    //实例内部类
    class InnerClass1{

    }

    //静态内部类
    static class InnerClass2{

    }

        }
//内部类：一个类定义在一个类的内部或者定义在一个方法的内部
//内部类：普通内部类（定义在方法里面，很少使用）、匿名内部类、静态内部类、实例内部类
interface A{
    void testA();
}

public class Test1 {
    public static void main(String[] args) {
        int val = 20;
        //匿名内部类
        //以下代码可以认为有一个类实现了A接口并且重写了A接口中的方法
//        new Test.A(){
//            @Override
//            public void testA() {
//                System.out.println("哈哈！");
//            }
//        }.testA();//要调用只要在分号前加.testA()即可

        //或者通过下面的方法来调用
        A a = new A(){
            @Override
            public void testA() {
                System.out.println("哈哈！");
                //默认在这里访问的是被final修饰的（也就是常量）
                System.out.println("值"+ val);//val不能被修改。在匿名内部类中，能够被访问的是没有被修改过的数据->变量的捕获

            }
        };//要调用只要在分号前加.testA()即可
        a.testA();
    }

}
